<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="css/app.css" >
    <title>Pebble Benchmarks</title>
  </head>
  <body>
    <div class="center rows">
      <div class="section">
        <div class="columns">
          <div class="title">Pebble Benchmarks</div>
          <div class="updated">Last updated</div>
        </div>
        <br/>
        <div class="columns">
          <div class="overview">
            Benchmarks are run nightly using <a class="code"
            href="https://github.com/cockroachdb/pebble/blob/master/cmd/pebble/ycsb.go">pebble
            bench ycsb</a> on AWS machines equipped with local SSD
            storage. The AWS instances show remarkably high instance
            to instance performance variability. In order to smooth
            out that variability the benchmarks are run multiple
            times each (using different instances) and outliers are
            excluded.
          </div>
          <div>
            <div class="controls">
              <b>Detail:</b>
              <a id="readBytes" class="toggle">Bytes Read</a> |
              <a id="writeBytes" class="toggle">Bytes Written</a> |
              <a id="readAmp" class="toggle">Read Amp</a> |
              <a id="writeAmp" class="toggle">Write Amp</a>
            </div>
            <div class="controls">
              <b>Options:</b>
              <a id="localMax">Local scale</a>
            </div>
          </div>
        </div>
        <hr class="divider"/>
        <div class="annotation" data-date="20241015">Enabled columnar
          blocks</div>
        <div class="annotation" data-date="20250509">Enabled value
          separation (values=1024 variant)</div>
        <div class="annotation" data-date="20250827">Vary count of
          cached blob file readers</div>
      </div>
      <div class="section rows">
        <div>
          <span class="subtitle">YCSB A</span>
          <span>(50% reads, 50% updates, zipf key distribution)</span>
        </div>
        <div class="columns">
          <svg class="chart ycsb" data-key="ycsb/A/values=64"></svg>
          <svg class="chart ycsb" data-key="ycsb/A/values=1024"></svg>
        </div>
      </div>
      <div class="section rows">
        <div>
          <span class="subtitle">YCSB B</span>
          <span>(95 reads, 5% updates, zipf key distribution)</span>
        </div>
        <div class="columns">
          <svg class="chart ycsb left" data-key="ycsb/B/values=64"></svg>
          <svg class="chart ycsb right" data-key="ycsb/B/values=1024"></svg>
        </div>
      </div>
      <div class="section rows">
        <div>
          <span class="subtitle">YCSB C</span>
          <span>(100% reads, zipf key distribution)</span>
        </div>
        <div class="columns">
          <svg class="chart ycsb left" data-key="ycsb/C/values=64"></svg>
          <svg class="chart ycsb right" data-key="ycsb/C/values=1024"></svg>
        </div>
      </div>
      <div class="section rows">
        <div>
          <span class="subtitle">YCSB D</span>
          <span>(95% reads, 5% updates, uniform key distribution)</span>
        </div>
        <div class="columns">
          <svg class="chart ycsb left" data-key="ycsb/D/values=64"></svg>
          <svg class="chart ycsb right" data-key="ycsb/D/values=1024"></svg>
        </div>
      </div>
      <div class="section rows">
        <div>
          <span class="subtitle">YCSB E</span>
          <span>(95% scans, 5% updates, zipf key distribution)</span>
        </div>
        <div class="columns">
          <svg class="chart ycsb left" data-key="ycsb/E/values=64"></svg>
          <svg class="chart ycsb right" data-key="ycsb/E/values=1024"></svg>
        </div>
      </div>
      <div class="section rows">
        <div>
          <span class="subtitle">Insert-only</span>
          <span>(100% inserts, zipf key distribution)</span>
        </div>
        <div class="columns">
          <svg class="chart ycsb left" data-key="ycsb/F/values=64"></svg>
          <svg class="chart ycsb right" data-key="ycsb/F/values=1024"></svg>
        </div>
      </div>
    </div>
    <div class="center rows">
      <div class="section">
        <hr class="divider"/>
        <div>
          <span class="subtitle">Write throughput</span>
          <span>(100% inserts, zipf key distribution)</span>
        </div>
        <br />
        <div class="overview">
          This benchmark attempts to find the optimal write throughput by
          driving more and more load against the DB until a target heuristic
          fails (currently a mixture of number of L0 sublevels, L0 files, and
          whether the DB has experienced a write stall). These benchmarks are
          run nightly using <a class="code"
          href="https://github.com/cockroachdb/pebble/blob/master/cmd/pebble/write.go">pebble
          bench write</a> on GCP n2-standard-32 machines equipped with 16 local
          SSDs in a RAID 0 array.
        </div>
      </div>
      <div class="section rows">
        <div class="columns">
          <svg class="chart write-throughput" data-key="write/values=1024"></svg>
          <svg class="chart write-throughput-detail"/>
        </div>
      </div>
    </div>
    <script src="js/d3.v5.min.js"></script>
    <script src="https://pebble-benchmarks.s3.amazonaws.com/data.js"></script>
    <script src="js/write-throughput.js"></script>
    <script src="js/app.js"></script>
  </body>
</html>
